package com.itheima.domian;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * User实体类 对应MySQL中的tb_user表
 */

@Data   // 为成员变量生成Getter和Setter方法
@Builder // 快速构建对象
@NoArgsConstructor
@AllArgsConstructor
// 当表名和实体类名不一致的时候 使用TableName注解来指定该实体对应的表名
// 如果不使用TableName注解 那么该实体默认对应的表名是类名首字母变小写
// 通常表名多个单词之间使用 _ 连接  实体多个单词使用驼峰命名法 MP可以自动转换其对应关系
// 如果一个项目中多张表都有固定的前缀 可以在配置文件中进行全局的配置
@TableName("tb_user")
public class User implements Serializable {
    // TableId注解标记这个属性是一个ID(主键)
    // 同时可以指定该主键的生成策略
    @TableId(type = IdType.AUTO)
    private Long id;
    // 用来映射属性名称和字段名称的对应关系
    // 属性中的驼峰命名会被自动转换成 _ 的连接
    // MP中的转换方式是  遇大写就加 _
    // @TableField("username")
    // 属性的首字母必须要小写
    // windows 平台的数据库中的字段名称是不区分大小写的 Linux是严格区分大小写的
    //@TableField("user_name")
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;

    // 如果有的属性不是表中对应的字段 可以通过 exist = false 来进行排除

    @TableField(exist = false)
    private Date birthday;
}
/*

建表语句脚本:

CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_name` varchar(20) NOT NULL COMMENT '用户名',
  `password` varchar(20) NOT NULL COMMENT '密码',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

*/